package generic;

import java.util.ArrayList;

/**
 * Created by xiebang
 * Description
 * User:小谢
 * Date:2021-10-24
 * Time:21:46
 */
//泛型的边界
    /*
    实现一个泛型类，写一个方法，找到数组中的最大值
     */
    //现在代表在进行擦除的时候，擦除到Comparable接口的地方。
    //T实现了compareable接口
    class Algorithm <T extends Comparable<T>> {

        public T findMax(T[] array){
            T max = array[0];
            for (int i = 0; i < array.length; i++) {
                if (max.compareTo(array[i]) < 0){//引用类型的比较不能进行大于小于号的比较
                    max = array[i];
                }
            }
            return max;
        }
}

class Algorithm2 <T> {
        public static<T extends Comparable<T>> T findMax(T[] array){
            T max = array[0];
            for (int i = 0; i < array.length; i++) {
                if (max.compareTo(array[i]) < 0){
                    max = array[i];
                }
            }
            return max;
        }

}
//通配符?
//上下界
class GenericDemo{
    public static<T> void print(ArrayList<T> list){
        for (T t:list) {
            System.out.println(t + " ");
        }
        System.out.println();
    }

    public static void print2(ArrayList<?> list){
        for (Object obj:
             list) {
            System.out.print(obj + " ");
        }
        System.out.println();
    }
}

// 内部类：定义在类的内部的类叫内部类
//本地内部类 ：定义在方法里的类 （不重要）
//实例内部类 ：
//静态内部类
//匿名内部类
public class TestDemo2 {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        GenericDemo.print2(list);
    }
    public static void main1(String[] args) {
        Algorithm<Integer> algorithm = new Algorithm<>();
        Integer[] array = {1,2,3,4,5,6,7,8,9};

//
//        int ret = algorithm.findMax(array);
        Integer ret = Algorithm2.<Integer>findMax(array);
        System.out.println(ret);
    }
}
